﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using LojaEmDia.Negocio;
using System.Data.Linq.SqlClient;
using System.Data.Objects.DataClasses;

namespace LojaEmDia.Negocio.Dominio
{
    class DominioCliente : DominioBase
    {
        private static DominioCliente _instancia;
        Repository<CLIENTE, ModeloLojaContainer> _Repository = null;

        private DominioCliente()
        {
            _Repository = new Repository<CLIENTE, ModeloLojaContainer>(this.Contexto);
            _Repository.KeyProperty = "COD_CLIENTE";
        }

        public static DominioCliente Me
        {
            get {

                if (_instancia == null)
                    _instancia = new DominioCliente();
                return _instancia;
            }
        }


        public List<CLIENTE> Listar()
        {
            var query = (from _clientes in this.Contexto.CLIENTE
                         select _clientes);

            return query.ToList();

        }




        internal IList<CLIENTE> Listar(int pagina, int quantidadeRegistros)
        {
            System.Linq.Expressions.Expression<Func<CLIENTE, object>> sortexpression = e => e.NOM_CLIENTE;
            return _Repository.SelectAll(sortexpression, quantidadeRegistros, pagina * quantidadeRegistros);
        }


        internal List<CLIENTE> PesquisarPorCPF(string cpf)
        {
           
            var query = (from c in this.Contexto.CLIENTE where c.CPF_CLIENTE == cpf
                         select c);

            return query.ToList();
        }

        internal List<CLIENTE> PesquisarPorNome(string nome)
        {

            var query = (from c in this.Contexto.CLIENTE
                         where c.NOM_CLIENTE.StartsWith( nome.Trim())
 
                         select c);

            return query.ToList();
        }

        internal void Salvar(List<CLIENTE> list)
        {
            foreach (CLIENTE c in list)
            {
                if (c.COD_CLIENTE == 0)
                    this.Contexto.CLIENTE.AddObject(c);
              
            }
            this.Contexto.SaveChanges();

        }
    }
}
